<?php

//Trait高级动态添加方法
namespace Utils;
trait InjectionTrait {
    /**
     * 自动调用类中存在的方法
     */
    public function __call($name, $args) {
        if (is_callable($this->$name)) {
            return call_user_func($this->$name, $args);
        } else {
            throw new \RuntimeException("Method {$name} does not exist");
        }
    }
    /**
     * 添加方法
     */
    public function __set($name, $value) {
        $this->$name = is_callable($value) ? $value->bindTo($this, $this) : $value;
    }
}
/**
 * 只带属性不带方法动物类
 *
 * @author fantasy
 */
class Animal {
    use InjectionTrait;
    private $dog = '汪汪队';
}
$animal = new Animal;
// 往动物类实例中添加一个方法获取实例的私有属性$dog
$animal->getdog = function () {
    return $this->dog;
    // return new ReflectionClass($this);

};
echo $animal->getdog(); //输出 汪汪队
